from django.db.models import F, Q, Sum
from django.shortcuts import render

# Create your views here.
from .models import BookInfo, HeroInfo

# 增加操作
# book = BookInfo()
# book.btitle = '三国'
# book.bpub_date = '2011-11-11'
# book.save()

# book = BookInfo(
#     btitle='西游记',
#     bpub_date='1999-11-11'
# )
# book.save()

# 表示创建的同时直接存储
# BookInfo.objects.create(
#     btitle='西游记',
#     bpub_date='1999-11-11'
# )


# 基本查询  get  all  count
# BookInfo.objects.get(id=1)

# BookInfo.objects.all()

# BookInfo.objects.count()

# 过滤查询
# BookInfo.objects.filter(id=1)

# BookInfo.objects.filter(btitle__contains='湖')

# BookInfo.objects.filter(btitle__endswith='部')

# BookInfo.objects.filter(btitle__isnull=False)

# BookInfo.objects.filter(id__in=[2, 4])

# 大于 gt 小于lt  大于等于gte 小于等于lte
# BookInfo.objects.filter(id__gt=2)

# BookInfo.objects.exclude(id=3)


# BookInfo.objects.filter(bpub_date__year='1980')

# BookInfo.objects.filter(bpub_date__gt='1990-1-1')


# F对象 当需要两个属性/字段比较时使用F对象
# BookInfo.objects.filter(bread__gt=F('bcomment'))

# BookInfo.objects.filter(bread__gt=F('bcomment')*2)

# Q对象可以实现基本查询也可以做 & | ~
# BookInfo.objects.filter(Q(bread__gt=20) | Q(id__lt=3))

# BookInfo.objects.filter(~Q(id=3))


# 聚合
# BookInfo.objects.aggregate(Sum('bread'))

# 关联的基本查询
# 一查多: 先把一查出来,然后一的模型对象.多的模型类型名小写_set
# book = BookInfo.objects.get(id=3)
# book.heroinfo_set.all()

# 多查一: 先把多的那一方查出来, 然后多的这一方模型对象.hbook
hero = HeroInfo.objects.get(hname='郭靖')
book = hero.hbook


# 关联过滤查询
# 查询人物评论中包'八'的那些书
# 多查一  多当条件: 条件语法 模型类名小写__属性__比较运算符
BookInfo.objects.filter(heroinfo__hcomment__contains='八')

set(BookInfo.objects.filter(heroinfo__hgender=1))
# 一般外键在多的一方
"""
关联查询时,如果写多的当条件: 类名__xxx
如果一来当条件 :外键__xx
"""

# 一查多
# HeroInfo.objects.filter(hbook__id=1)
HeroInfo.objects.filter(hbook__btitle__contains='雪')



